<script setup lang="ts">
import { showFailToast, showLoadingToast } from 'vant'
import { getConsultOrderPayUrl } from '@/api/consult'

import { ref } from 'vue'

// 定义api
//  v-model:show(语法糖) = :show + @update:show
const props = defineProps<{
  orderId: string // 订单ID
  show: boolean // 控制弹层显示
  // 注意：异步数据传入使用可选，保持类型一致
  actualPayment?: number // 实际付款
  onClose?: () => void
  payCallback?: string // 指定支付成功回跳地址
}>()

const emit = defineEmits<{
  (e: 'update:show', data: boolean): void
}>()

// 用法
// <cp-pay-sheet
//    v-model:show="show" // 控制支付抽屉显隐
//    :order-id="orderId" // 订单ID
//    :actualPayment="payInfo.actualPayment" // 支付金额
//    :onClose="onClose" // 关闭后回调
// />

// 支付方式: 0 微信支付 ｜ 1 支付宝支付
const paymentMethod = ref<0 | 1>()
// 支付订单
const payOrder = async () => {
  // 1. 判断是否选择支付方式
  if (paymentMethod.value === undefined) return showFailToast('请选择支付方式')
  showLoadingToast('开始支付...')
  // 2. 获取支付地址
  const { data } = await getConsultOrderPayUrl({
    paymentMethod: paymentMethod.value,
    orderId: props.orderId,
    // 回跳地址=》将来支付成功，回跳地址
    // 说明：props.payCallback有值，会优先跳转
    payCallback: props.payCallback || 'http://localhost:5173/room'
    // 说明：如果路由模式是hash,地址需要带#号，例如：http://localhost:5173/#/room
  })
  // 3. 跳转支付
  window.location.href = data.payUrl
}
</script>

<template>
  <!-- 支付弹层 -->
  <!-- 注意：
 v-model:show(语法糖) = :show + @update:show
 问题： v-model:show="show" 会修改父组件变量show=》不支持=》单向数据流
 解决：使用完整写法 
 // <cp-pay-sheet
//    v-model:show="show" // 控制支付抽屉显隐
//    :order-id="orderId" // 订单ID
//    :actualPayment="payInfo.actualPayment" // 支付金额
//    :onClose="onClose" // 关闭后回调
// />
-->
  <van-action-sheet
    :show="show"
    @update:show="emit('update:show', $event)"
    title="选择支付方式"
    :before-close="onClose"
    :closeable="false"
  >
    <div class="pay-type">
      <p class="amount">￥{{ actualPayment?.toFixed(2) }}</p>
      <van-cell-group>
        <van-cell title="微信支付" @click="paymentMethod = 0">
          <template #icon><cp-icon name="consult-wechat" /></template>
          <template #extra><van-checkbox :checked="paymentMethod === 0" /></template>
        </van-cell>
        <van-cell title="支付宝支付" @click="paymentMethod = 1">
          <template #icon><cp-icon name="consult-alipay" /></template>
          <template #extra><van-checkbox :checked="paymentMethod === 1" /></template>
        </van-cell>
      </van-cell-group>
      <div class="btn">
        <van-button @click="payOrder" type="primary" round block>立即支付</van-button>
      </div>
    </div>
  </van-action-sheet>
</template>

<style lang="scss" scoped>
// 支付弹层样式
.pay-type {
  .amount {
    padding: 20px;
    text-align: center;
    font-size: 16px;
    font-weight: bold;
  }
  .btn {
    padding: 15px;
  }
  .van-cell {
    align-items: center;
    .cp-icon {
      margin-right: 10px;
      font-size: 18px;
    }
    .van-checkbox :deep(.van-checkbox__icon) {
      font-size: 16px;
    }
  }
}
</style>
